package ar.uade.distribuidas.tpo.web.servlets;

import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import ar.uade.distribuidas.tpo.base.dominiodto.CotizacionDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.SolicitudDeCotizacionDTO;
import ar.uade.distribuidas.tpo.dao.CotizacionXmlDao;
import ar.uade.distribuidas.tpo.dao.CotizarXMLDAO;
import ar.uade.distribuidas.tpo.web.delegado.BD;

/**
 * Servlet implementation class Cotizar
 */
@WebServlet("/Cotizar")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
maxFileSize=1024*1024*10,      // 10MB
maxRequestSize=1024*1024*50)   // 50MB
public class Cotizar extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Cotizar() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/cotizar.jsp");
//		int cuil = Integer.valueOf(request.getParameter("cuil"));
		//String fileName = request.getParameter("file");
		

		try{
			
			Part parteArch = request.getPart("file");
			InputStream filecontent = parteArch.getInputStream();
			
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder;
			builder = factory.newDocumentBuilder();
			Document doc = builder.parse(filecontent);
			CotizarXMLDAO cotizarDAO = CotizarXMLDAO.getInstancia();
			List<SolicitudDeCotizacionDTO> listas = cotizarDAO.recuperarSolCot(doc);
			List<SolicitudDeCotizacionDTO> listasDB = new LinkedList<SolicitudDeCotizacionDTO>(); 
			
			for (SolicitudDeCotizacionDTO sdto : listas){
				BD.getInstance().altaSolicitudDeCotizacion(sdto);
				SolicitudDeCotizacionDTO s = BD.getInstance().getSolicitudDeCotizacion(sdto.getId());
				listasDB.add(s);
			}
			
			
			CotizacionDTO cotizacionDTO = null;
			for (SolicitudDeCotizacionDTO solicitudes : listasDB){
				cotizacionDTO = BD.getInstance().crearCotizacion(solicitudes);
				BD.getInstance().altaCotizacion(cotizacionDTO);
			}
			
			String coti = CotizacionXmlDao.getInstance().generarCotizacionXML(cotizacionDTO);
			//System.out.println(coti);
			request.setAttribute("xmlgen1", coti);
			

			
			request.setAttribute("allok", "La solicitud fue procesada correctamente.");
			request.getRequestDispatcher("/jsp/cotizar.jsp").forward(request, response);
			
		}catch(Exception e){
			request.setAttribute("allerror", "Hubo un error al procesar la solicitud.");
			request.getRequestDispatcher("/jsp/cotizar.jsp").forward(request, response);

		}
	}

}
